<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      console.log("" + 1 + 0); // "10"，字符串连接
      console.log("" - 1 + 0); // -1，进行算术运算，""转换为0，
      console.log(true + false); // 1，进行算术运算，true转换为1，false转换为0
      console.log(6 / "3"); // 2，进行算术运算，"3"转换为3
      console.log("2" * "3"); // 6，进行算术运算，"2"转换为2，"3"转换为3
      console.log(4 + 5 + "px"); // "9px"，先进行算术运算得到9，然后与"px"字符串连接
      console.log("$" + 4 + 5); // "$45"，字符串连接，首先"$"与4连接，然后与5连接
      console.log("4" - 2); // 2，进行算术运算，"4"转换为4
      console.log("4px" - 2); // NaN，"4px"无法转换成数字进行减法运算
      console.log("  -9  " + 5); // "  -9  5"，字符串连接
      console.log("  -9  " - 5); // -14，进行算术运算，"-9"转换为-9
      console.log(null + 1); // 1，null转换为0，加上1等于1
      console.log(undefined + 1); // NaN，undefined转换为NaN，加上1得到NaN
      console.log(" \t \n" - 2); // NaN，空格和换行符无法转换成数字进行减法运算
      console.log(0 == true); // false，0不等于true（类型不同）
      console.log(1 == true); // true，1等于true（值相同，类型不同）
      console.log(1 === true); // false，1与true的类型不同
      console.log("a" == false); // false，“a”与false不相等（类型不同）
      console.log("" == false); // true，空字符串与false都转换为0
      console.log("" === false); // false，空字符串与false的类型不同
      console.log(undefined == null); // true，undefined与null在==比较下相等
      console.log(undefined === null); // false，undefined与null的类型不同
      console.log(!3); // false，非操作符对真值返回假
      console.log(!!3); // true，双非操作符对真值返回真
      console.log(123 || null || "abc"); // 123，逻辑或运算中第一个真值
      console.log(0 || null || "abc"); // "abc"，逻辑或运算中第一个真值
      console.log(0 || null || undefined); // undefined，所有都是假值，返回最后一个
      console.log(123 && null && "abc"); // null，逻辑与运算中遇到第一个假值
      console.log(0 && null && "abc"); // 0，逻辑与运算中第一个假值
      console.log(123 && [] && "abc"); // "abc"，逻辑与运算中最后一个真值
      console.log(123 ?? "abc"); // 123，由于123不是null也不是undefined，因此直接返回123
      console.log(null ?? "abc"); // "abc"，由于null是空值，因此返回"abc"
    </script>
  </body>
</html>
